package com.base.cn.platform.os.controller.statistics;

import com.base.cn.platform.os.common.AdminBaseController;
import com.base.cn.platform.os.service.manage.statistics.base.ZStatisticsOrderBaseCountService;
import com.base.cn.platform.os.service.manage.statistics.base.ZStatisticsUserBaseCountService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * 基础统计Controller
 *
 * @author hackeridear
 */
@Controller
@RequestMapping("/admin/stat")
public class BaseStatController extends AdminBaseController {
    @Autowired
    private ZStatisticsUserBaseCountService zStatisticsUserBaseCountService;
    @Autowired
    private ZStatisticsOrderBaseCountService zStatisticsOrderBaseCountService;

    @RequestMapping("/base")
    public String base(){
        return resultPage("/statistics/base/base-statistics");
    }

    //====================基础数据统计======================================

    /**
     * 获取订单统计数据
     * @param type 时间类型，1=今日实时，2=近7天（不包含当天），3=近30天（不包含当天），4=自定义（只可选当天之前的时间，且时间跨度不超过12月）
     * @param startTime 开始时间
     * @param endTime 结果时间
     * @return Map<String,Object>
     */
    @RequestMapping("/queryOrderBaseCountList")
    @ResponseBody
    public Map<String,Object> queryOrderBaseCountList(@RequestParam(value = "type",required = false,defaultValue = "1") int type,
                                                      @RequestParam(value = "startTime",required = false) Date startTime,
                                                      @RequestParam(value = "endTime",required = false) Date endTime){
        Map<String,Object> params = this.getParams(type,startTime,endTime);
        return zStatisticsOrderBaseCountService.queryOrderBaseCountList(params);
    }

    /**
     * 获取用户统计数据
     * @param type 时间类型，1=今日实时，2=近7天（不包含当天），3=近30天（不包含当天），4=自定义（只可选当天之前的时间，且时间跨度不超过12月）
     * @param startTime 开始时间
     * @param endTime 结果时间
     * @return Map<String,Object>
     */
    @RequestMapping("/queryUserBaseCountList")
    @ResponseBody
    public Map<String,Object> queryUserBaseCountList(@RequestParam(value = "type",required = false,defaultValue = "1") int type,
                                                     @RequestParam(value = "startTime",required = false) Date startTime,
                                                     @RequestParam(value = "endTime",required = false) Date endTime){
        Map<String,Object> params = this.getParams(type,startTime,endTime);
        return zStatisticsUserBaseCountService.queryUserBaseCountList(params);
    }


    //====================运营概况统计======================================

    /**
     * 获取订单统计数据
     * @param type 时间类型，1=今日实时，2=近7天（不包含当天），3=近30天（不包含当天），4=自定义（只可选当天之前的时间，且时间跨度不超过12月）
     * @param startTime 开始时间
     * @param endTime 结果时间
     * @return Map<String,Object>
     */
    @RequestMapping("/queryOperationOverviewBaseCountList")
    @ResponseBody
    public Map<String,Object> queryOperationOverviewBaseCountList(@RequestParam(value = "type",required = false,defaultValue = "1") int type,
                                                      @RequestParam(value = "startTime",required = false) Date startTime,
                                                      @RequestParam(value = "endTime",required = false) Date endTime){
        Map<String,Object> params = this.getParams(type,startTime,endTime);
        return zStatisticsOrderBaseCountService.queryOrderBaseCountList(params);
    }

    /**
     * 获取查询条件
     * @param type type 时间类型，1=今日实时，2=近7天（不包含当天），3=近30天（不包含当天），4=自定义（只可选当天之前的时间，且时间跨度不超过12月）
     * @param startTime 开始时间
     * @param endTime 结果时间
     * @return Map<String,Object>
     */
    private Map<String,Object> getParams(int type,Date startTime,Date endTime){
        Map<String,Object> params = new HashMap<>();
        params.put("type",type);
        params.put("startTime",startTime);
        params.put("endTime",endTime);
        return params;
    }
}
